package com.micro.modual.controller;

import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.core.resp.RespJsonPageData;
import com.micro.modual.model.bo.messagemodule.MessageModuleBO;
import com.micro.modual.model.bo.messagetext.MessageTextBO;
import com.micro.modual.model.dto.messagemodule.MessageModuleDetailDTO;
import com.micro.modual.model.dto.messagemodule.MessageModuleListDTO;
import com.micro.modual.model.dto.messagemodule.MessageModuleShowBO;
import com.micro.modual.model.dto.messagesend.MessageSendListDTO;
import com.micro.modual.model.dto.messagetext.MessageTextDetailDTO;
import com.micro.modual.model.dto.messagetext.MessageTextListDTO;
import com.micro.modual.service.MessageModuleService;
import com.micro.modual.service.MessageSendService;
import com.micro.modual.service.MessageTextService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author LevelCoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020/8/4
 */
@Api(value = "消息管理",tags = "消息管理")
@RestController
@RequestMapping(value = "/message")
public class MessageController {

    @Autowired
    private MessageTextService messageTextService;

    @Autowired
    private MessageModuleService messageModuleService;

    @Autowired
    private MessageSendService messageSendService;


    /**
     * <h2>查找消息内容表 列表</h2>
     * @param params 列表查询请求对象
     * @return List<MessageTextListDTO> {@link MessageTextListDTO}s  消息内容表 列表返回对象
     */
    @ApiOperation(value = "查询消息内容表列表" ,notes = "查询消息内容表列表")
    @GetMapping(value = "/findMessageTextList")
    public RespJsonPageData<MessageTextListDTO> findMessageTextList(@RequestParam  Map<String,Object> params){
        return messageTextService.findMessageTextList(params);
    }

    /**
     * <h2>根据主键编号查看消息内容表详情</h2>
     * @param id  消息内容表 主键编号
     * @return {@link MessageTextDetailDTO}  消息内容表 详情
     */
    @ApiOperation(value = "查询消息内容表详情",notes = "根据主键编号，查询消息内容表详情")
    @GetMapping(value = "/findMessageTextDetail/{id}")
    public RespJsonData<MessageTextDetailDTO> findMessageTextDetail(@PathVariable("id") Long id){
        return messageTextService.findDetail(id,MessageTextDetailDTO.class);
    }

    /**
     * <h2>新增消息内容表详情</h2>
     * @param messageTextBO {@link MessageTextBO} 消息内容表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增消息内容表",notes = "新增消息内容表")
    @PostMapping(value = "/addMessageText")
    public RespJson addMessageText(@RequestBody MessageTextBO messageTextBO){
        return messageTextService.addMessageText(messageTextBO);
    }

    /**
     * <h2>修改消息内容表详情</h2>
     * @param messageTextBO  {@link MessageTextBO} 消息内容表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改消息内容表",notes = "修改消息内容表")
    @PostMapping(value = "/editMessageText")
    public RespJson editMessageText(@RequestBody MessageTextBO messageTextBO){
        return messageTextService.editMessageText(messageTextBO);
    }

    /**
     * <h2>根据主键编号删除消息内容表信息</h2>
     * @param id  消息内容表 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除消息内容表",notes = "根据地址ID，删除消息内容表")
    @PostMapping(value = "/deleteMessageText/{id}")
    public RespJson deleteMessageText(@PathVariable("id") Long id){
        return messageTextService.deleteMessageText(id);
    }



    /**
     * <h2>查找消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 列表</h2>
     * @param params 列表查询请求对象
     * @return List<MessageModuleListDTO> {@link MessageModuleListDTO}s  消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 列表返回对象
     */
    @ApiOperation(value = "查询消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等列表" ,notes = "查询消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等列表")
    @GetMapping(value = "/findMessageModuleList")
    public RespJsonPageData<MessageModuleListDTO> findMessageModuleList(@RequestParam  Map<String,Object> params){
        return messageModuleService.findList(params,MessageModuleListDTO.class);
    }

    /**
     * <h2>根据主键编号查看消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等详情</h2>
     * @param id  消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 主键编号
     * @return {@link MessageModuleDetailDTO}  消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 详情
     */
    @ApiOperation(value = "查询消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等详情",notes = "根据主键编号，查询消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等详情")
    @GetMapping(value = "/findMessageModuleDetail/{id}")
    public RespJsonData<MessageModuleDetailDTO> findMessageModuleDetail(@PathVariable("id") Long id){
        return messageModuleService.findDetail(id,MessageModuleDetailDTO.class);
    }

    /**
     * <h2>新增消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等详情</h2>
     * @param messageModuleBO {@link MessageModuleBO} 消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等",notes = "新增消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等")
    @PostMapping(value = "/addMessageModule")
    public RespJson addMessageModule(@RequestBody MessageModuleBO messageModuleBO){
        return messageModuleService.addMessageModule(messageModuleBO);
    }

    /**
     * <h2>修改消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等详情</h2>
     * @param messageModuleBO  {@link MessageModuleBO} 消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等",notes = "修改消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等")
    @PostMapping(value = "/editMessageModule")
    public RespJson editMessageModule(@RequestBody MessageModuleBO messageModuleBO){
        return messageModuleService.editMessageModule(messageModuleBO);
    }

    /**
     * <h2>根据主键编号删除消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等信息</h2>
     * @param id  消息来源表:记录当前消息从哪块来的,可以是组织活动.系统通知等等 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除消息来源表",notes = "根据ID，删除消息来源表")
    @PostMapping(value = "/deleteMessageModule/{id}")
    public RespJson deleteMessageModule(@PathVariable("id") Long id){
        return messageModuleService.deleteMessageModule(id);
    }

    /**
     * <h2>修改消息模块是否显示</h2>
     * @param messageModuleShowBO
     * @return
     */
    @ApiOperation(value = "修改消息模块是否显示",notes = "修改消息模块是否显示")
    @PostMapping(value = "/modifyMessageModuleShow")
    public RespJson modifyMessageModuleShow(@RequestBody MessageModuleShowBO messageModuleShowBO){
        return messageModuleService.modifyMessageModuleShow(messageModuleShowBO);
    }

    /**
     * <h2>校验模块名称是否存在</h2>
     * @param moduleName  消息模块名称
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "校验模块名称是否存在",notes = "校验模块名称是否存在")
    @PostMapping(value = "/validataMessageMouduleNameExist/{moduleName}")
    public RespJson validataMessageMouduleNameExist(@PathVariable("moduleName") String moduleName){
        return messageModuleService.validataMessageMouduleNameExist(moduleName);
    }

    /**
     * <h2>校验模块编号是否存在</h2>
     * @param moduleCode  消息模块编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "校验模块编号是否存在",notes = "校验模块编号是否存在")
    @PostMapping(value = "/validataMessageMouduleCodeExist/{moduleCode}")
    public RespJson validataMessageMouduleCodeExist(@PathVariable("moduleCode") String moduleCode){
        return messageModuleService.validataMessageMouduleCodeExist(moduleCode);
    }


    /**
     * <h2>查找消息发送表 列表</h2>
     * @param params 列表查询请求对象
     * @return List<MessageSendListDTO> {@link MessageSendListDTO}s  消息发送表 列表返回对象
     */
    @ApiOperation(value = "查询消息发送表列表" ,notes = "查询消息发送表列表")
    @GetMapping(value = "/findMessageSendList")
    public RespJsonPageData<MessageSendListDTO> findMessageSendList(@RequestParam  Map<String,Object> params){
        return messageSendService.findList(params,MessageSendListDTO.class);
    }
}
